package br.ufrj.dcc.decisiontree;

import java.util.List;

import br.ufrj.dcc.AbstractLearningProblem;

/**
 * Classes that implement this interface are treated
 * as an implementation of a Decision Tree algorithm.
 * So the output will be a tree with nodes representing
 * attributes or goals and edges representing the 
 * attributes' choices among their domain values.
 * Given a test example, following the root node until a
 * leaf guides you to its classification based on the training.
 * @author Pedro Rougemont
 * @author Fabricio Firmino
 *
 */
public interface AbstractDecisionTree extends AbstractLearningProblem {

	  /**
	  * Responsible for the execution of the especific
	  * implementation of a decision tree algorithym.
	  * Expects an ordered list of type String[], which must
	  * have the following pattern:
	  * [parent, child1, child2, child3..] for each row.
	  * A depth first search will be used to retrieve and 
	  * build the nodes, expanding until a leaf 
	  * value is found.
	  * @return string representation of the decision tree
	  */
	 List<String[]> buildDecisionTree();
	 
}
